package mx.itesm.pruebadmescenas;

import org.andengine.engine.Engine;
import org.andengine.engine.camera.Camera;
import org.andengine.entity.scene.Scene;
import org.andengine.opengl.vbo.VertexBufferObjectManager;

/**
 * Representa las características principales de una escena. Las diferentes escenas del juego
 * deben heredar de esta clase
 * 
 * @author Roberto Martínez Román
 *
 */
public abstract class EscenaBase extends Scene
{
	// Contexto, variables protegidas para que puedan ser accedidas desde las sublcases
    protected Engine engine;
    protected ProyectoJuego actividad;
    protected ManejadorRecursos admRecursos;
    protected ManejadorEscenas admEscenas;
    protected VertexBufferObjectManager vbom;
    protected Camera camara;
    
    // Constructor, será llamado por cada subclase (cada escena del juego)
    public EscenaBase()
    {
        this.admRecursos = ManejadorRecursos.getInstance();
        this.admEscenas = ManejadorEscenas.getInstance();
        this.engine = admRecursos.engine;
        this.actividad = admRecursos.actividadJuego;
        this.vbom = admRecursos.vbom;
        this.camara = admRecursos.camara;
        crearEscena();	// Se crea la escena adecuada
    }
    
    // Métodos abstractos, todas las escenas deben sobrescribir estos métodos
    public abstract void crearEscena();
    public abstract void onBackKeyPressed();
    public abstract TipoEscena getTipoEscena();
    public abstract void liberarEscena();
}